#include <map>
#include <string>
#include <vector>
#include <sstream>
#include <iostream>

using namespace std;

map<int, string> chinese {
  {0, "ling"}, {1, "yi"}, {2, "er"}, {3, "san"}, {4, "si"}, {5, "wu"},
  {6, "liu"}, {7, "qi"}, {8, "ba"}, {9, "jiu"}
};

// 转换 10000 以内的数字
string read_num(long n) {
  ostringstream oss;

  // 已经读过了 0
  bool is_read_zero = false;
  // 是否需要读 0
  bool need_to_read_zero = false;

  // 处理千位数字
  int q = n / 1000;
  n %= 1000; // 让 n 等于除去千位后剩余的部分
  if (q != 0) {
    oss << chinese[q] << " qian ";
    // 如果不是整数千，就说明需要在接下来遇到 0 的时候读 ling。
    need_to_read_zero = (n != 0);
  }

  // 处理百位数字
  q = n / 100;
  n %= 100;
  if (q != 0) {
    oss << chinese[q] << " bai ";
    need_to_read_zero = (n != 0);
  }
  else if (!is_read_zero && need_to_read_zero) {
    // 如果还没读过 0，并且数字需要读 0。
    oss << "ling ";
    is_read_zero = true;
  }

  // 处理十位数字
  q = n / 10;
  n %= 10;
  if (q != 0) {
    oss << chinese[q] << " shi ";
  }
  else if (!is_read_zero && need_to_read_zero) {
    oss << "ling ";
    // 这里就不用在设置 is_read_zero = true 了，
    // 因为个位的 0 肯定不用读。
  }

  // 处理个位数字
  if (n != 0) {
    oss << chinese[n];
  }

  return oss.str();
}

// 答案
string solution(long n) {
  ostringstream oss;
  bool need_to_read_zero = false;

  // 先计算有多少亿
  long quotient = n / 100000000;
  if (quotient != 0) {
    oss << read_num(quotient) << " yi ";
    // 如果亿位有数字，说明我们接下来需要读 0
    need_to_read_zero = true;
  }

  // 再计算有多少万
  n = n % 100000000;
  quotient = n / 10000;
  if (quotient >= 1000) {
    // 大于等于 1000 万时，正常读出结果
    oss << read_num(quotient) << " wan ";
    need_to_read_zero = true;
  }
  else if (quotient != 0 && need_to_read_zero) {
    // 否则读百万部分的时候要加前导 0
    // 例如：103000000
    oss << "ling " << read_num(quotient) << " wan ";
    need_to_read_zero = true;
  }
  else if (quotient != 0) {
    // 读普通的百万数字
    oss << read_num(quotient) << " wan ";
    need_to_read_zero = true;
  }

  // 最后处理万以内的数字
  n = n % 10000;
  if (n >= 1000) {
    oss << read_num(n);
  }
  else if (n != 0 && need_to_read_zero) {
    oss << "ling " << read_num(n);
  }
  else if (n != 0) {
    oss << read_num(n);
  }

  return oss.str();
}

int main(int argc, char const *argv[])
{
  /* code */
  cout << solution(102340567) << endl;
  return 0;
}
